#include "gestion_mots.h"
#include <time.h>
#include <stdbool.h>

void trouver_mot(char *mot_a_trouver,int offset,int taille_grille)
{
	FILE *dico;
	switch (taille_grille)
	{
		case 5:
			dico=fopen("Dictionnaires/dico-5.txt","r");
		break;
		case 6:
			dico=fopen("Dictionnaires/dico-6.txt","r");
		break;
		case 7:
			dico=fopen("Dictionnaires/dico-7.txt","r");
		break;
		case 8:
			dico=fopen("Dictionnaires/dico-8.txt","r");
		break;
		case 9:
			dico=fopen("Dictionnaires/dico-9.txt","r");
		break;
		default:
		break;
	}	
	rewind(dico);
	while(offset>0)
		{
		fscanf(dico,"%s",mot_a_trouver);
		offset--;
		}
	fclose(dico);
}

int nbmots(int taille_grille)
{
	FILE *dico;
	char caraclu;
	int nombre_mots=0;
	switch (taille_grille)
	{
		case 5:
			dico=fopen("Dictionnaires/dico-5.txt","r");
		break;
		case 6:
			dico=fopen("Dictionnaires/dico-6.txt","r");
		break;
		case 7:
			dico=fopen("Dictionnaires/dico-7.txt","r");
		break;
		case 8:
			dico=fopen("Dictionnaires/dico-8.txt","r");
		break;
		case 9:
			dico=fopen("Dictionnaires/dico-9.txt","r");
		break;
		default:
		break;
	}
	rewind(dico);
	do{
		caraclu=fgetc(dico);
		if(caraclu=='\n')
			nombre_mots++;
	  }
	while(caraclu!=EOF);
	fclose(dico);
	return nombre_mots;
}

int nombreAleatoire(int nombreMax)
{
    srand(time(NULL));
    return (rand() % nombreMax);
}

void sortie_mot_hasard(char *mot_a_trouver,int taille_grille)
{
  int nb_total=0,offset=0;
  nb_total=nbmots(taille_grille);
  offset=nombreAleatoire(nb_total);
  trouver_mot(mot_a_trouver,offset,taille_grille);
}

void traitement_mot(lettre userword[LIGNES_MAX][TAILLE_MAX],char *mot_a_trouver,int indice,int taille_grille)
{
  int i=0,x=0;
  //Test d'apartenance
  while(x<taille_grille)
  {
  for(i=0;i<taille_grille;i++)
    if(userword[indice][x].l==mot_a_trouver[i])
       userword[indice][x].appartient=true;
  x++;
  }
  //Test de placement
  for(i=0;i<taille_grille;i++)
      if(userword[indice][i].l==mot_a_trouver[i])
	    userword[indice][i].bien_place=true;
}

bool mot_dans_dico(lettre mot[LIGNES_MAX][TAILLE_MAX],int indice_ligne)
{
	bool InDict=false;
	int comparaison=1,lecture_ok=1;
	char current[25]="";
	char mot_a_chercher[TAILLE_MAX];
	int i=0;	
	memset(mot_a_chercher,0,TAILLE_MAX);
	for(i=0;i<TAILLE_MAX;i++)
	{
		mot_a_chercher[i]=mot[indice_ligne][i].l;
	}	
	FILE *dico;
	dico=fopen("liste_francais.txt","r");
	rewind(dico);
	while(lecture_ok==1 && InDict == false)
		{
		lecture_ok=fscanf(dico,"%s",current);
		comparaison=strcmp(mot_a_chercher,current);
		if(comparaison==0)
		      InDict=true;
		else
		      InDict=false;
		}
	fclose(dico);
	return InDict;
}

bool controler_taille(lettre mot[LIGNES_MAX][TAILLE_MAX],int indice_ligne,int taille_grille)
{
   	int i=0,l=0;
	while(i<TAILLE_MAX)
	{
		if(mot[indice_ligne][i].l!=0)
		{
			l++;
		}
		i++;
	}
	if(l<=taille_grille)
		return true;
	else
		return false;
}

void init_mot_grille(lettre mot[LIGNES_MAX][TAILLE_MAX])
{
	int i,j;
	for(i=0;i<LIGNES_MAX;i++)
	{
		for(j=0;j<TAILLE_MAX;j++)
		{
			mot[i][j].l=0;
			mot[i][j].appartient=false;
			mot[i][j].bien_place=false;
		}
	}
}

void copier_mot(lettre mot[LIGNES_MAX][TAILLE_MAX],char* source,int indice_ligne)
{
	if(source&&indice_ligne<=LIGNES_MAX)
	{
		int len=strlen(source);
		int i;
		for(i=0;i<len;i++)
		{
			mot[indice_ligne][i].l=source[i];
		}
	}
}

void effacer_mot(lettre mot[LIGNES_MAX][TAILLE_MAX],int indice)
{
	int j;
		for(j=0;j<TAILLE_MAX;j++)
		{
			mot[indice][j].l=0;
			mot[indice][j].appartient=false;
			mot[indice][j].bien_place=false;
		}
	}

bool gagner(lettre userword[LIGNES_MAX][TAILLE_MAX],char *mot_a_trouver,int indice,int taille_grille)
{
  int i=0,bienplacer=0,lg=0;
  bool win=false;
  for(i=0;i<taille_grille;i++)
    if(userword[indice][i].bien_place==true)
	bienplacer++;
  lg=strlen(mot_a_trouver);
  if(bienplacer==lg)
      win=true;
  else 
      win=false;
  return win;
}
